package cn.iocoder.yudao.module.erp.service.dp;

import java.util.*;
import javax.validation.*;

import cn.iocoder.yudao.module.erp.controller.admin.dispatchvehicle.vo.DispatchVehicleSaveReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.dp.dpyw.vo.DpYwPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.dp.dpyw.vo.DpYwSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dispatchvehicle.DispatchVehicleDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dp.DpYwDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.erp.dal.dataobject.dpitem.DpItemYwDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dplist.DpEastListYwDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dplist.DpWestListYwDO;

/**
 * ERP义乌制单 Service 接口
 * @author 天使管理员
 */
public interface DpYwService {

    /**
     * 创建ERP义乌制单
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createDpYw(@Valid DpYwSaveReqVO createReqVO);

    /**
     * ERP义乌运单配车
     * @param dispatchNumber
     * @param createReqVO
     * @return
     */
//    Boolean configCar(String dispatchNumber, List<DispatchorderitemSaveReqVO> createReqVO);

    /**
     * 更新ERP义乌制单
     * @param updateReqVO 更新信息
     */
    void updateDpYw(@Valid DpYwSaveReqVO updateReqVO);

    /**
     * 删除ERP义乌制单
     * @param id 编号
     */
    void deleteDpYw(String id);

    /**
     * 获得ERP义乌制单
     * @param id 编号
     * @return ERP义乌制单
     */
    DpYwDO getDpYw(String id);

    /**
     * 获得ERP义乌制单分页
     * @param pageReqVO 分页查询
     * @return ERP义乌制单分页
     */
    PageResult<DpYwDO> getDpYwPage(DpYwPageReqVO pageReqVO);

    /**
     * 获得ERP义乌制单出库列表
     * @param pageReqVO
     * @return
     */
    PageResult<DpYwDO> dpYwOuterList(DpYwPageReqVO pageReqVO);

    /**
     * 获得ERP义乌制单入库列表
     * @param dispatchNumber
     * @return
     */
    List<DispatchVehicleDO> dpYwEnterList(String dispatchNumber, Integer line, Integer inventoryStatus, Integer dest,String dpId);

    /**
     * ERP义乌制单配车出库
     * @param createReqVO
     */
    void dpYwOutStroe(DispatchVehicleSaveReqVO createReqVO);

    /**
     * ERP义乌运单入库
     * @param createReqVO
     */
    void enterStroeDpYw(List<DispatchVehicleSaveReqVO> createReqVO);

    /**
     * 获得ERP义乌制单和详情分页
     * @param pageReqVO 分页查询
     * @return ERP义乌制单分页
     */
    PageResult<DpYwDO> getDpYwAndItemPage(DpYwPageReqVO pageReqVO);

    // ==================== 子表（ERP义乌制单货号详情） ====================

    /**
     * 获得ERP义乌制单货号详情列表
     * @param no 入库编号
     * @return ERP义乌制单货号详情列表
     */
    List<DpItemYwDO> getDpItemYwListByNo(String no);

    // ==================== 子表（义乌东线清单） ====================

    /**
     * 获得义乌东线清单列表
     * @param no 运单号
     * @return 义乌东线清单列表
     */
    List<DpEastListYwDO> getDpEastListYwListByNo(String no);

    // ==================== 子表（义乌西线清单） ====================

    /**
     * 获得义乌西线清单列表
     * @param no 运单号
     * @return 义乌西线清单列表
     */
    List<DpWestListYwDO> getDpWestListYwListByNo(String no);

    /**
     * ERP物流义乌制单审核
     * @param dpYwDO
     */
    void examineDpYw(DpYwDO dpYwDO);

}